package com.fly.okhttp.util;

import android.text.TextUtils;

import java.security.MessageDigest;

/**
 * Created with IntelliJ IDEA.
 * Package_Name：com.example.ALiPay_Library.util
 * Project_Name：MyNetDemo1
 * User：郭鹏飞
 * Date：2015/3/2
 * Email：love518420@foxmail.com
 * Description：对字符串进行处理
 */
public class MD5 {

    private MD5() {
    }

    /**
     * 根据MD5信息摘要算法 通过一个网络地址生成一个字符串
     *
     * @param str 网络地址
     * @return 字符串 <p>可能返回空</p>
     */
    public static String makeKeyByMD5(String str) {
        if (TextUtils.isEmpty(str)) {   // 判断需要加密的字符串是否为空
            throw new NullPointerException("字符串为空");
        }
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(str.getBytes("UTF-8"));
            byte data[] = md5.digest();
            if (data == null) {
                throw new NullPointerException("获得密文完成哈希计算失败");
            }
            StringBuilder sb = new StringBuilder();
            for (byte mByte : data) {
                // 将一个byte转换成int 由于最后要将结果转换成十六进制
                // 所以为了避免 由于位差造成的补位错误
                // 进行与运算 将高 24 位 清 0
                int m = (int) (mByte & 0x0ff);

                // 保证数据格式 保证在转换的时候不出错
                if (m <= 0x0f) {
                    sb.append("0");
                }
                sb.append(Integer.toHexString(m));
            }
            String key = sb.toString();
            if (key == null) {
                throw new NullPointerException("生成数据失败");
            }
            return key;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将md5字符串转换成小写
     *
     * @param md5Str MD5字符串
     * @return 将大写转为小写以后的字符串 {可能返回null}
     */
    public static String toLowerCase(String md5Str) {
        if (TextUtils.isEmpty(md5Str))
            throw new NullPointerException("需要转换字符串为空");
        return md5Str.toLowerCase();
    }

    /**
     * 将MD5字符串转换成大写
     *
     * @param md5Str MD5字符串
     * @return 将小写转为大写以后的字符串 {可能返回null}
     */
    public static String toUpperCase(String md5Str) {
        if (TextUtils.isEmpty(md5Str))
            throw new NullPointerException("需要转换字符串为空");
        return md5Str.toUpperCase();
    }

}
